package com.ceair.utils;

import com.ceair.entity.ActReProcdef;
import com.ceair.entity.vo.ActReProcdefVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
 * @author wangbaohai
 * @ClassName ActReProcdefStructMapper
 * @description: 流程部署定义信息结构映射器
 * @date 2025年04月21日
 * @version: 1.0.0
 */
@Mapper
public interface ActReProcdefStructMapper {

    /**
     * Mapper接口，用于在{@link ActReProcdef}和{@link ActReProcdefVO}之间进行转换。
     * 该接口提供了将实体映射为值对象以及将值对象映射为实体的方法。
     */
    ActReProcdefStructMapper INSTANCE = Mappers.getMapper(ActReProcdefStructMapper.class);

    /**
     * 将{@link ActReProcdef}实体对象转换为其对应的{@link ActReProcdefVO}值对象。
     *
     * @param actReProcdef 要转换的{@link ActReProcdef}实体对象，不能为空。
     * @return 转换后的{@link ActReProcdefVO}值对象。
     * @throws IllegalArgumentException 如果输入参数'actReProcdef'为空，则抛出异常。
     */
    default ActReProcdefVO toVO(ActReProcdef actReProcdef) {
        // 验证输入参数是否为空
        if (actReProcdef == null) {
            throw new IllegalArgumentException("输入参数'actReProcdef'不能为空。");
        }
        return mapToVO(actReProcdef);
    }

    /**
     * 将{@link ActReProcdef}实体对象映射为其对应的{@link ActReProcdefVO}值对象。
     *
     * @param actReProcdef 要映射的{@link ActReProcdef}实体对象。
     * @return 映射后的{@link ActReProcdefVO}值对象。
     */
    ActReProcdefVO mapToVO(ActReProcdef actReProcdef);

    /**
     * 将{@link ActReProcdefVO}值对象转换为其对应的{@link ActReProcdef}实体对象。
     *
     * @param actReProcdefVO 要转换的{@link ActReProcdefVO}值对象，不能为空。
     * @return 转换后的{@link ActReProcdef}实体对象。
     * @throws IllegalArgumentException 如果输入参数'actReProcdefVO'为空，则抛出异常。
     */
    default ActReProcdef toEntity(ActReProcdefVO actReProcdefVO) {
        // 验证输入参数是否为空
        if (actReProcdefVO == null) {
            throw new IllegalArgumentException("输入参数'actReProcdefVO'不能为空。");
        }
        return mapToEntity(actReProcdefVO);
    }

    /**
     * 将{@link ActReProcdefVO}值对象映射为其对应的{@link ActReProcdef}实体对象。
     *
     * @param actReProcdefVO 要映射的{@link ActReProcdefVO}值对象。
     * @return 映射后的{@link ActReProcdef}实体对象。
     */
    ActReProcdef mapToEntity(ActReProcdefVO actReProcdefVO);


}
